//  权限拦截  导航守卫
import router from "@/router"; // 引入路由实例
import store from "@/store";
import NProgress from "nprogress";
import "nprogress/nprogress.css";

const whiteList = ["/login", "/404"]; // 定义白名单  所有不受权限控制的页面

router.beforeEach(async (to, from, next) => {
  NProgress.start(); // 开启进度条
  if (store.getters.token) {
    // 有  token 判断是否去往 登录页
    if (to.path === "/login") {
      // 去登录页
      next("/");
    } else {
      if (!store.getters.userId) {
        // 如果没有 id 才会调用 vuex 获取资料，有 id 说明已经有用户资料，就不用重新获取了
        await store.dispatch("user/getUserInfo");
      }
      next(); // 直接放行
    }
  } else {
    //  没有 token  判断是否在白名单内
    if (whiteList.indexOf(to.path) > -1) {
      //  找到了表示在白名单内，直接放行
      next();
    } else {
      //  没有 token  也不在白名单内
      next("/login"); // 跳转到 登录页
    }
  }
  NProgress.done(); // 手动强制关闭一次 为了解决手动切换地址是  进度条不关闭的问题
});

//  后置守卫
router.afterEach(function() {
  NProgress.done(); // 关闭进度条
});
